<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <script type="text/JavaScript">
        /*
            基本数据类型
            String Number Undefined Null Boolean
            引用数据类型
            Object

            JS中变量都是保存到栈内存中的,
                基本数据类型的值直接在栈内存中存储,
                值与值之间是独里存在的,修改一个变量不会影响其他的变量

                对象是保存在堆内存中的,而每创建一个新的对象,就会在堆内存中开辟出一个新的空间,
                而变量保存的值是对象的内存地址(对象的引用),如果两个对象保存的是同一个对象引用
                当通过一个变量修改对象的属性时,另一个也会收到影响

        */

        var obj = new Object();
        obj.name = "HPX";
        var obj2 = obj;
        // 当我对obj和obj2所对应的堆内存的内容进行更改，因为两个所对应的堆内存的内存地址是相同的，所以输出的时候引用的内容也是一致的，故而输出647
        obj.name = "647";
      //   console.log(obj2.name);
        // 修改obj2的值为null
        obj2 = null;
        // 因为修改obj2的值为null了,所以输出为空值,而不是obj的值(内存地址)里面的堆内存的内容
        console.log(obj);
        console.log(obj2);


        /*
            当比较两个基本数据类型的值的时候就是比较值,
            而比较两个引用数据类型的时候,他是比较对象的内存地址,
                如果两个对象是一摸一样的,但是内存地址不同,他就会返回false
        */
       var obj3 = new Object();
       var obj4 = new Object();
        obj3.name  = "zhe";
        obj4.name  = "zhe";
        console.log(obj3 == obj4);
    </script>
  </head>
  <body></body>
</html>
